package com.operator.Activitys.fragment;

import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.View;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.google.gson.Gson;
import com.operator.Activitys.R;
import com.operator.Activitys.activity.InstallDetailsActivity;
import com.operator.Activitys.activity.PayForgetPwdActivity;
import com.operator.Activitys.activity.PayManageActivity;
import com.operator.Activitys.activity.RechargeActivity;
import com.operator.Activitys.adapter.InstallOrderAdapter;
import com.operator.Activitys.adapter.base.BaseRecyclerViewAdapter;
import com.operator.Activitys.bean.InstallOrder;
import com.operator.Activitys.bean.OrderPayState;
import com.operator.Activitys.bean.State;
import com.operator.Activitys.bean.User;
import com.operator.Activitys.dialog.PopEnterPassword;
import com.operator.Activitys.fragment.base.BaseFragment;
import com.operator.Activitys.http.manager.UserManager;
import com.operator.Activitys.utils.Constant;
import com.operator.Activitys.utils.JumperUtils;
import com.operator.Activitys.utils.ToastUtils;
import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;

import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;
import org.simple.eventbus.ThreadMode;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;

/**
 * 项目名称：金泽云 手机app
 * 类描述：宽带 订单
 * 创建人：张飞祥
 * 创建时间：2018/5/31 9:03
 * 修改人：张飞祥
 * 修改时间：2018/5/31 9:03
 * 修改备注：
 */
public class InstallOrderFragment extends BaseFragment{

    //数据列表
    @Bind(R.id.rv_order_list)
    RecyclerView rvOrderList;
    //刷新主体控制器
    @Bind(R.id.layout_order_refresh)
    SmartRefreshLayout layoutOrderRefresh;
    //下拉刷新
    @Bind(R.id.header_material)
    MaterialHeader headerMaterial;

    //初始化网络请求
    public UserManager mApiManager;

    //TODO http 变量
    //请求哪一页
    private int mIndex = 1;
    //每页几条
    private int mPageCount = 10;
    //上拉加载 没有数据 page 是否 +1
    private boolean mPullPageFlag = true;

    //TODO 宽带订单
    //宽带订单 adapter
    private InstallOrderAdapter mInstallAdapter = null;
    //宽带订单 list
    private List<InstallOrder> mInstallList = null;

    //TODO 当前 内存中 用户信息
    private User mACacheUser = null;

    //支付 弹窗
    private PopEnterPassword mPopPayPwd = null;
    //信息弹窗
    private MaterialDialog mMsgDialog = null;
    //点击 item 某一个支付按钮，获取当前 的 item 实体
    private InstallOrder mInstallOrder = null;

    @Override
    protected void initViews() {
        //网络请求接口 常驻方法
        mApiManager = mApiManager.getUserApiManager(getActivity(),getActivity().getTaskId());
        //设置下拉刷新小圆圈 颜色
        headerMaterial.setColorSchemeColors(getResources().getColor(R.color.colorPrimary));
        //TODO 获取内存用户实体
        Gson gson = new Gson();
        mACacheUser = gson.fromJson(mACache.getAsJSONObject(Constant.CACHE_USER) + "", User.class);

        //TODO 开始 网络请求
        initOrderHttp();
        //TODO 上拉加载
        initLoadMoreListener();
        //TODO 下拉刷新
        initPullRefresh();
    }

    /**
     * 下拉刷新操作
     */
    private void initPullRefresh() {
        layoutOrderRefresh.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                //TODO 开始刷新
                initOrderHttp();
                //圆圈延时 3s销毁
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //TODO View 非空判断
                        if (layoutOrderRefresh != null) {
                            //结束刷新
                            layoutOrderRefresh.finishRefresh();
                        }
                    }
                }, 3000);
            }
        });
    }

    /**
     * http 获取 宽带订单 网络请求
     */
    private void initOrderHttp(){
        //清空列表
        if (mInstallList != null && mInstallList.size()>0)
            mInstallList.clear();
        //初始化全局 list
        mInstallList = new ArrayList<>();
        //设置 为 首次加载
        mApiManager.getType(Constant.FIRST_LOAD);
        //显示自动刷新
        layoutOrderRefresh.autoRefresh();
        //初始化 上拉加载  page 允许 +1
        mPullPageFlag = true;
        //初始化页数
        mIndex = 1;

        //开始网络请求
        mApiManager.userInstallOrder(mACacheUser.getId(),mIndex,mPageCount);
    }

    /**
     * 上拉加载数据
     */
    private void initLoadMoreListener() {

        layoutOrderRefresh.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                //设置文字上拉加载更多
                mApiManager.getType(Constant.PULLUP_LOAD_MORE);
                //如果 为 true 可以 查看下一页
                if (mPullPageFlag) {
                    //数据请求
                    mIndex = mIndex + 1;
                }
                //TODO 上拉加载 网络请求
                mApiManager.userInstallOrder(mACacheUser.getId(),mIndex,mPageCount);
            }
        });
    }

    /**
     * 显示 支付视图弹窗
     */
    private void setShowPayPopupView(String title,double money) {

        //TODO 配置弹窗
        mPopPayPwd = new PopEnterPassword(getActivity(),title,money) {
            //输入支付密码完成后，所要进行的操作
            @Override
            public void setOnFinishInput(String pwd) {
                //弹出加载框
                initShowTimeDialog("正在验证支付密钥....",getActivity());
                //开始验证支付密码
                mApiManager.userCheckPayPwd(mACacheUser.getId(),pwd);
            }
        };

        /**
         * 显示 支付窗口
         * ps：设置 “Gravity” layout在PopupWindow中显示的位置
         */
        mPopPayPwd.showAtLocation(getActivity().findViewById(R.id.layout_my_order),
                Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
    }

    /**
     * 验证支付 报错
     */
    @Subscriber(tag = Constant.BUS_MY_CHECK_PAY_ERROR, mode = ThreadMode.MAIN)
    public void initCheckPayError(String strError) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁加载提示框
                mFrgTimeDialog.dismiss();
                //弹出提示
                ToastUtils.showShort(getActivity(),"订单支付失败，网络连接不稳定！");
            }
        }, 2000);
    }

    /**
     * 验证支付
     */
    @Subscriber(tag = Constant.BUS_MY_CHECK_PAY, mode = ThreadMode.MAIN)
    public void initCheckPay(final State state) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO 判断当前是否验证成功
                if (state.getState().equals("1")){
                    //设置 支付标题
                    mFrgTimeDialog.setContent("正在支付，请稍后...");
                    //开始支付网络请求
                    mApiManager.userInstallPay(mACacheUser.getId(),mInstallOrder.getOrderId());
                }else{
                    //销毁加载提示框
                    mFrgTimeDialog.dismiss();
                    //显示提示信息 dialog
                    mMsgDialog = new MaterialDialog.Builder(getActivity())
                            .content("支付密码错误，请重试")
                            .negativeText("重试")
                            .negativeColor(Color.parseColor("#cccccc"))
                            .onNegative(new MaterialDialog.SingleButtonCallback() {
                                @Override
                                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                    //弹出支付软件盘
                                    setShowPayPopupView("宽带订单支付", mInstallOrder.getPrice());
                                }
                            })
                            .positiveText("忘记密码")
                            .onPositive(new MaterialDialog.SingleButtonCallback() {
                                @Override
                                public void onClick(MaterialDialog dialog, DialogAction which) {
                                    //跳转忘记 支付密码页面
                                    JumperUtils.JumpTo(getActivity(), PayForgetPwdActivity.class);
                                }
                            }).show();
                }
            }
        }, 2000);
    }

    /**
     * 宽带订单 列表 报错
     */
    @Subscriber(tag = Constant.BUS_MY_INSTALL_ORDER_LIST_ERROR, mode = ThreadMode.MAIN)
    public void initInstallListError(String httpInstallError) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (layoutOrderRefresh != null) {
                    //结束刷新
                    layoutOrderRefresh.finishRefresh(false);
                    //结束加载
                    layoutOrderRefresh.finishLoadMore(false);
                    //弹出提示
                    ToastUtils.showShort(getActivity(), "加载失败，网络连接不稳定！");
                }
            }
        }, 2000);
    }


    /**
     * 宽带订单 列表  首次数据加载
     */
    @Subscriber(tag = Constant.BUS_MY_INSTALL_ORDER_LIST, mode = ThreadMode.MAIN)
    public void initInstallList(final List<InstallOrder> list) {

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                //TODO View 非空判断
                if (rvOrderList != null) {
                    //TODO 动态判断 当前 母体 选择的是 宽带订单
                    if (list != null && list.size() != 0) {
                        //设置 全局"宽带订单"变量 数据
                        mInstallList.addAll(list);
                        //设置 宽带订单 适配器
                        mInstallAdapter = new InstallOrderAdapter(getActivity(), list) {
                            //TODO 支付点击事件
                            @Override
                            public void setPayItemOnclick(final int pos) {
                                //获取 某一个 支付点击的实体对象
                                mInstallOrder = list.get(pos);
                                /**
                                 * 判断 店铺 是否被冻结
                                 *
                                 * 已冻结：不可以支付当前订单了
                                 *
                                 * 未冻结：可以支付当前订单
                                 *
                                 *          重新 获取用户实体对象，判断 支付密钥是否为空
                                 *
                                 *          非空的： 则直接 开启支付
                                 *          是空的： 跳转 设置 支付密码
                                 */
                                mACacheUser = new Gson().fromJson(mACache.getAsJSONObject(Constant.CACHE_USER) + "", User.class);

                                //TODO 判断是否被冻结
                                if (Constant.SHOP_STATE_YES.equals(mACacheUser.getState())) {
                                    if (mACacheUser.getTsPwd() != null  && !mACacheUser.getTsPwd().equals(""))
                                        //弹出支付软件盘
                                        setShowPayPopupView("宽带订单支付", mInstallOrder.getPrice());
                                    else
                                        JumperUtils.JumpTo(getActivity(),PayManageActivity.class);
                                }else {
                                    ToastUtils.showShort(getActivity(), getResources().getString(R.string.shop_state_no));
                                }
                            }
                        };
                        //item 点击事件
                        mInstallAdapter.setOnItemClickListener(new BaseRecyclerViewAdapter.OnRecyclerViewItemClickListener() {
                            @Override
                            public void onItemClick(View view, int position) {
                                Bundle bundle = new Bundle();
                                bundle.putSerializable(Constant.INTENT_ORDER_INSTALL_BEAN, mInstallList.get(position));
                                JumperUtils.JumpTo(getActivity(), InstallDetailsActivity.class, bundle);
                            }
                        });
                        //添加 适配器 样式
                        rvOrderList.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
                        //添加 适配器
                        rvOrderList.setAdapter(mInstallAdapter);
                        //显示无数据 重新加载页面
                        ToastUtils.showShort(getActivity(), "刷新成功！");
                    } else {
                        //显示无数据提示
                        ToastUtils.showShort(getActivity(), "还没有宽带订单数据！");
                    }
                    //结束刷新
                    layoutOrderRefresh.finishRefresh();
                }
            }
        }, 3000);
    }

    /**
     * 宽带订单 列表  上拉加载数据
     */
    @Subscriber(tag = Constant.BUS_MY_INSTALL_ORDER_LIST_FOOT)
    public void initInstallListFoot(List<InstallOrder> list) {
        final List<InstallOrder> footList = list;

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (layoutOrderRefresh != null) {
                    /**
                     * 判断是否有数据
                     * 当 返回列表 数据 size 0 没有更多数据可加载了
                     */
                    if (footList.size() == 0) {
                        //page 不允许 + 1
                        mPullPageFlag = false;
                        //显示提示
                        ToastUtils.showShort(getActivity(), "没有更多数据了");
                    } else {
                        //page 允许 + 1
                        mPullPageFlag = true;
                        //填充上拉加载数据，加载到adapter里面
                        mInstallList.addAll(footList);
                        if (mInstallAdapter != null) {
                            mInstallAdapter.addFooterItem(footList);
                        }
                        ToastUtils.showShort(getActivity(), "更新了 " + footList.size() + " 条目数据");
                    }
                    //结束加载
                    layoutOrderRefresh.finishLoadMore();
                }
            }
        }, 2000);
    }

    /**
     * 宽带订单 支付 报错
     */
    @Subscriber(tag = Constant.BUS_MY_INSTALL_ORDER_PAY_ERROR, mode = ThreadMode.MAIN)
    public void initInstallPayError(String httpInstallError) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁加载弹窗
                mFrgTimeDialog.dismiss();
                //弹出提示
                ToastUtils.showShort(getActivity(),"支付失败，网络连接不稳定！");
            }
        }, 2000);
    }

    /**
     * 宽带订单 支付 数据返回
     */
    @Subscriber(tag = Constant.BUS_MY_INSTALL_ORDER_PAY, mode = ThreadMode.MAIN)
    public void initInstallPay(final OrderPayState bean) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁加载弹窗
                mFrgTimeDialog.dismiss();
                //TODO 支付结果判断
                switch (bean.getState()){

                    //支付成功
                    case "1":
                        //保存新的 用户余额参数
                        mACacheUser.setRemainder(bean.getRemainder());
                        mACache.put(Constant.CACHE_USER, new Gson().toJson(mACacheUser));
                        //更新我的页面 余额
                        EventBus.getDefault().post(bean.getRemainder(),Constant.BUS_MY_REMAINDER);
                        //开始刷新当前页面
                        initOrderHttp();
                        break;
                    //余额不足
                    case "2":
                        //跳转 充值页面
                        JumperUtils.JumpTo(getActivity(), RechargeActivity.class);
                        break;
                }
                //消息提示
                ToastUtils.showShort(getActivity(),bean.getMsg());
            }
        }, 2000);
    }

    @Override
    protected int getContentViewId() {
        return R.layout.frg_order;
    }
}
